jquery ajax
אני בונה טופס הוספת מאמר שנשלח עם jq ajax,
עכשיו, אחרי שאני שולח המערכת עושה לי שגיאה כזאת:
The requested URL's length exceeds the capacity limit for this server.
איך אני יכול לסדר את זה?
תודה רבה!
9 תשובות
ככל הנראה אתה שולח את הבקשה בגט. השגיאה אומרת שהמידע שמועבר דרך הURL כלומר הגט גדול מדי. ישנה דרך אחת לפיתרון והיא לשלוח את הבקשה בפוסט...
אם אתה שולח בAjax , מה הטעם לשנות משהו בהגדרה של הטופס ?
תשנה את מה שצריך בהגדרה של ה Ajax, לא של הטופס
אני לא ממש מומחה בזה.
זה הקוד שלי:
$("form[name='"+formname+"']").submit(function(){
var data = $(this).serialize();
$("#ajaxmesbox").load("includes/ajax/"+tofile+".php", data, function(html){
if (show) $("#ajaxmesbox").show();
$(this).html(html);
});
return false;
יש קצת הבדלים בין GET לבין POST.
GET זה כשכול הפרמטרים שלך מועברים בשורת הכתובת
abc.php?a=1&b=2&c=3&d=4&...&e=5
POST זה כשכל הפרמטרים מועברים בתוכן הבקשה, לא בכתובת. והכתובת נשארת פשוט abc.php
השגיאה שקיבלת אומרת
הכתובת שאתה מנסה לגשת אליה - ארוכה מדי.
מכאן נובע שהבקשה שלך נשלחת ב GET, כל הנתומים של הטופס נכתבים בשורת הכתובת והדפדפן או השרת מגבילים את עורך הכתובת המרבי. הפתרון יהיה לשנות את הבקשה ככה, שהנתונים נשלחים ב POST.
הולכים לדוקומנטציה של jquery.load
ומנסים להבין מה הפונקציה הזו עושה ואיך לשנות את הmethod שבו היא משתמשת, ואז מגלים את השורה הבאה:
שבתרגום מאנגלית אומר שהפעולה load שוות ערך לפעולה get ומכאן שהיא שולחת הכל ב GET.
ואז יש לנו שני אופציות. או להפסיק להשתמש ב load ולעבור לשימוש בפונקציה אחרת, נגיד post.$
או לקרוא הלאה ולראות אם אפשר לשנות את ההתנהגות של load.$
ממשיכים לקרוא הלאה ומגלים את השורה הבאה
אם הפרמטר של הנתונים מועבר בתור אובייקט - הפונקציה משתמשת ב POST, אחרת היא משתמשת ב GET.
בוא נראה איזה פרמטר אנחנו מעבירים לה? אנחנו מעבירים לה את data
ואיך data נוצר?
מה זה סריאליזציה ? זה רישום אובייקט בצורת מחרוזת.
אבל אם אתה לא יודע מה זה, יש לך שני אופציות. א. לשאול, ב. לקרוא מדריכים ב phpguide. יש מדריך שלם על זה.
עכשיו כשאנחנו יודעים ש data זה מחרוזת, ולא אובייקט ובגל זה הפונקציה עושה GET ולא POST
נשאר לברר איך הופכים את זה לאובייקט במקום מחרוזת.
לאן הולכים בשביל זה? נכון מאוד, לקרוא את הדוקמנטציה.
אני כתבתי במחיפוש של הדוקומטציה של jquery את המילה serialize
וקיבלתי את התוצאה הבאה. ראיתי ברשימה את הפונקציה serializeArray ומה היא עושה לאומת serialize רגיל וגיליתי שזה בדיוק מה שאני צריך. היא לוקחת אלמנטים של טופס ומכניסה אותם למערך (שזה אובייקט) במקום מחרוזת.
והדבר היחידי שצריך לשנות בקוד בשביל שהכל יעבוד זה את השורה
לא עובד ככה? תבדוק לבד מה יש במערך פוסט, במקום לחכות שלוש שעות לכל תשובה.